package apiserver

import (
	"git.hortorgames.com/orange/tang/http"
	"time"
)

type InternalContext struct {
	*http.Context
	RequestTime time.Time
	rawData     []byte
}

type InternalResponse struct {
	Code  int32       `json:"code,omitempty"`
	Error string      `json:"error,omitempty"`
	Body  interface{} `json:"body,omitempty"`
}

func (ctx *InternalContext) GetRawData() (data []byte, err error) {
	if len(ctx.rawData) > 0 {
		return ctx.rawData, nil
	}
	ctx.rawData, err = ctx.Context.Context.GetRawData()
	return ctx.rawData, err
}

//type internalContextDecoder struct {
//	contextWrapper http.ContextWrapper
//}
//
//func (d *internalContextDecoder) ContextWrapper() http.ContextWrapper {
//	return d.contextWrapper
//}
//
//func (d *internalContextDecoder) Decode(ctx http.IContext, params interface{}) {
//	var err error
//	defer func() {
//		if err != nil {
//			log.Error("decode params error", "err", err.Error())
//		}
//	}()
//
//	if ctx.Request().Method == "GET" || ctx.ContentType() == "application/x-www-form-urlencoded" {
//		err = ctx.Request().ParseForm()
//		if err != nil {
//			return
//		}
//		tmp := map[string]interface{}{}
//		for k, v := range ctx.Request().Form {
//			if len(v) > 0 {
//				tmp[k] = v[0]
//			}
//		}
//		json := utils.JsonEncodeToStringMust(tmp)
//		_ = utils.JsonDecodeString(json, params)
//	} else if ctx.ContentType() == "application/json" {
//		bytes, err := ctx.GetRawData()
//		if err != nil {
//			return
//		}
//		_ = utils.JsonDecode(bytes, params)
//	} else if ctx.ContentType() == "application/octet-stream" {
//		unzipped, ok := ctx.Get("_bytes")
//		if !ok {
//			bytes, err := ctx.GetRawData()
//			if err != nil {
//				return
//			}
//			ctx.Set("_bytes", bytes)
//			unzipped = bytes
//		}
//		//req := &Request{
//		//	Body: params,
//		//}
//		err = utils.BonDecode(unzipped.([]byte), params)
//		if err != nil {
//			return
//		}
//	}
//}
